home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 60.zip
/
BS1 part 60
/
Kick Pascal v2.10 d2.adf
/
SYSPROG
/
ConsoleToolDemo.p
< prev
next >
Wrap
Text File
|
1990-11-01
|
4KB
|
155 lines
Program ConsoleToolDemo;
Const
Length = 80;
Type
String80 = String[80];
Var
Win: Ptr;
Con: Ptr;
St: String[80];
z: Long;
Procedure WriteConInt(Con: ptr; { Devicehandle }
i: Long; { Zahl, die ausgegeben werden soll }
b: integer; { Basis }
f: integer); { Mindest-Feldbreite }
Var
s: String[40];
j,k,z,len: integer;
i2: Long;
Begin
j:=40;
s[40]:=chr(0); { Nullbyte am Ende }
i2:=abs(i);
Repeat
j:= j-1;
z:= i2 mod b; { letzte Ziffer von i2 }
If z<10 Then
s[j]:=chr(z+ord('0')) { Ziffern 0 bis 10 }
Else
s[j]:=chr(z-10+ord('A')); { Hexziffern A bis F }
i2:= i2 Div b;
Until i2=0;
If b=16 Then
Begin
j:=j-1;
s[j]:='$' { Hexzahlen automatisch mit "$" }
End;
If b=2 Then
Begin
j:=j-1;
s[j]:='%' { Binärzahlen mit "%" }
End;
If i<0 Then
Begin
j:=j-1;
s[j]:='-' { Minuszeichen bei neg. Zahlen }
End;
len:=40-j; { Gesamtlänge der Zahl }
For k:=1 to f-len Do
WriteCon(Con, ' '); { Am Anfang mit Spaces auffüllen }
WriteCon(Con, Str(^s[j])) { String ab j-tem Zeichen ausgeben }
End;
Procedure ReadConString(Con:Ptr; Var s: String80);
Const
Backspace = chr(8);
Return = chr(13);
Var
ch: Char;
i: integer;
Sig: Long;
Begin
i:=1;
Repeat
Sig:=Wait(-1);
ch:=ReadCon(Con);
If ( (ch >= chr(32)) and (ch < chr(127)) ) or (ch>=chr(160)) Then
Begin
WriteCon(Con,ch);
s[i]:=ch;
i:=i+1
End;
If (ch=BackSpace) and (i>1) Then
Begin
WriteCon(Con,''\8' '\8); { Ein Zeichen zurück, mit Space
überschreiben und wieder zurück }
i:=i-1
End;
Until (ch=Return) or (i>=79);
s[i]:=chr(0); { mit Space abschließen }
End;
Function Convert(s: String80): Long;
Var
i:Long;
j, b, z, sign: integer;
Begin
i:= 0;
b:= 10; { Basis }
j:= 1; { Stringanfang }
While s[j]=' ' Do
j:=j+1; { führende Spaces überlesen }
If s[j]='-' Then
Begin { negatives Vorzeichen }
sign:= -1;
j:=j+1
End
Else
Begin
sign:= 1;
If s[j]='+' Then j:=j+1 { Pluszeichen überlesen }
End;
If s[j] = '$' Then { Hexzahl }
Begin
b:=16; j:=j+1
End;
If s[j] = '%' Then { Binärzahl }
Begin
b:=2; j:=j+1
End;
Repeat
If (s[j] >= '0') and (s[j] <= '9') Then
z := ord(s[j]) - ord('0')
Else
If (s[j] >= 'a') and (s[j] <= 'z') Then
z := ord(s[j]) - ord('a') + 10
Else
If (s[j] >= 'A') and (s[j] <= 'Z') Then
z := ord(s[j]) - ord('A') + 10
Else
z:= -1; { ungültige Ziffer }
If z >= b Then
z:= -1; { zu groß für Basis }
If z >= 0 Then
i:= b*i + z;
j:= j+1
Until z<0;
Convert:= sign*i
End;
Begin
Win := Open_Window(0,0,640,200,1,0,$1006,'Test',Nil,640,200,640,200);
Con := OpenConsole(Win);
Repeat
WriteCon(Con, 'Eingabe: ');
ReadConString(Con, St);
If St <> '' Then
Begin
z:=Convert(St);
WriteCon(Con,''\n\n); { eine Leerzeile }
WriteConInt(Con, z, 10, 12); { dezimal, rechtsbündig }
WriteConInt(Con, z, 16, 12);
WriteCon(Con,' ');
WriteConInt(Con, z, 2, 1); { binär und linksbündig }
WriteCon(Con, ''\n\n)
End
Until St=''; { bei Leerzeile beenden }
CloseConsole(Con);
Close_Window(Win)
End.